package priv.pfz.basedao.annotations;

import priv.pfz.basedao.sharding.ShardingMode;

import java.lang.annotation.*;

/**
 * 标注在Mapper类上，提供表相关的信息
 * @author yyjxp
 * 2024/1/28 19:01
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Table {
    /**
     * 数据库名，默认为当前库(SELECT tablename)，填写时为指定库(SELECT dbname.tablename)
     */
    String dbName() default "";

    /**
     * 表名，默认根据Mapper类名推断，例如TradeInfoMapper表名为trade_info
     */
    String tableName() default "";

    /**
     * 开启逻辑删除功能
     * 所有字段由物理删除改为逻辑删除，delete_flag=0表示未删除，delete_flag>0表示已删除，已删除的记录无法查询或更新。
     * SELECT默认添加"delete_flag=0"条件
     * INSERT默认设置delete_flag为0
     * UPDATE默认添加"delete_flag=0"条件
     * DELETE转换为"UPDATE table SET delete_flag = id WHERE query AND delete_flag=0"
     */
    boolean enableLogicDelete() default false;

    /**
     * 逻辑删除列名
     */
    String logicDeleteColumnName() default "delete_flag";

    /**
     * 分库分表模式
     */
    ShardingMode shardingMode() default ShardingMode.NO_SHARDING;
}
